/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.jmx; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.rmi.registry.LocateRegistry; import javax.management.remote.JMXConnectorServer; import javax.management.remote.JMXConnectorServerFactory; import javax.management.remote.JMXServiceURL; /** * make jmx remote server * @author taktod */ public class JMXServerFactory { /** port number */ private static int port = -1; /** * ref for port. * @return */ public static int getPort() { return port; } /** * open jmx remote server(with port number) * @param port target port number. */ public static void openJMXRemoteServer(int port) throws Exception { JMXServerFactory.port = port; LocateRegistry.createRegistry(port); JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:" + port + "/jmxrmi"); JMXConnectorServer server = JMXConnectorServerFactory.newJMXConnectorServer(url, null, JMXFactory.getMBeanServer()); server.start(); } /** * make remote server * port number will be "pid + 1000 * x" * @throws Exception */ public static void openJMXRemoteServer() throws Exception { if(JMXServerFactory.port != -1) { return; } RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); int pid = Integer.parseInt(bean.getName().split("@")[0]); if(pid < 1000) { pid += 1000; } for(;pid < 65535;pid += 1000) { try { openJMXRemoteServer(pid); return; } catch (Exception e) { } } throw new Exception("cannot start jmx remote server."); } }